/*
  学习目标：redux-thunk 核心源码了解
*/
import { DEL_TODO, TOGGLE_IS_DONE, TOGGLE_TYPE } from './actionTypes';

export function delTodoCreator(id) {
  return { type: DEL_TODO, payload: id };
}
export function toggleTodoCreator(id) {
  return { type: TOGGLE_IS_DONE, payload: id };
}

export function toggleTypeCreator(type) {
  return { type: TOGGLE_TYPE, payload: type };
}

/* 模拟异步API的方法 */
function loadNewTodoAPI(params) {
  const newTodo = {
    id: Date.now(),
    name: '学习异步Action',
    isDone: false,
  };
  console.log('2秒后请求成功');
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('请求成功，数据返回');
      resolve(newTodo);
    }, 2000);
  });
}

// redux-thunk核心代码如下：
// 如果返回的是一个函数，就调用该函数，并且给函数传入dispatch和getState
// if (typeof action === 'function') {
//   return action(dispatch, getState, extraArgument);
// }
export function addTodoCreator() {
  return async (dispatch, getState) => {
    // console.log('getState()  ----->  ', getState());
    const newTodo = await loadNewTodoAPI();
    dispatch({ type: 'todo/add', payload: newTodo });
  };
}
